/**
 * 导出按钮组
 */
import React from 'react';
import { Button, Space, message } from 'antd';
import { FileExcelOutlined, FileTextOutlined, FilePdfOutlined } from '@ant-design/icons';
import { saveAs } from 'file-saver';
import type { ExtractedFields } from '../types/customs';
import { exportExcelFromData } from '../api/customs';
import { transformToBackendFormat } from '../utils/dataTransform';
import { exportTableDataToPDF } from '../utils/pdfFonts';

interface ExportButtonsProps {
  data: ExtractedFields;
  files: File[];
  disabled?: boolean;
}

const ExportButtons: React.FC<ExportButtonsProps> = ({ data, files, disabled = false }) => {
  // 导出JSON
  const handleExportJSON = () => {
    try {
      const jsonStr = JSON.stringify(data, null, 2);
      const blob = new Blob([jsonStr], { type: 'application/json' });
      const timestamp = new Date().toISOString().replace(/[:.]/g, '-').slice(0, -5);
      saveAs(blob, `报关单_${timestamp}.json`);
      message.success('JSON文件导出成功！');
    } catch (error) {
      message.error('JSON导出失败：' + (error as Error).message);
    }
  };

  // 导出Excel（使用前端数据，快速）
  const handleExportExcel = async () => {
    // 检查是否有数据
    if (!data || Object.keys(data).length === 0) {
      message.warning('没有可导出的数据，请先提取字段');
      return;
    }

    try {
      message.loading('正在生成Excel文件...', 0);
      
      // 将前端数据转换为后端格式
      const backendData = transformToBackendFormat(data);
      
      // 获取文件名前缀（从第一个文件名）
      const filenamePrefix = files.length > 0 
        ? files[0].name.replace(/\.[^/.]+$/, '') 
        : '报关单';
      
      // 调用快速导出API
      const blob = await exportExcelFromData(backendData, filenamePrefix);
      
      const timestamp = new Date().toISOString().replace(/[:.]/g, '-').slice(0, -5);
      saveAs(blob, `${filenamePrefix}_${timestamp}.xlsx`);
      
      message.destroy();
      message.success('Excel文件导出成功！导出的是页面当前显示的数据（包括您的编辑）');
    } catch (error) {
      message.destroy();
      message.error('Excel导出失败：' + (error as Error).message);
    }
  };

  // 导出PDF（支持中文，使用html2canvas方案）
  const handleExportPDF = async () => {
    // 检查是否有数据
    if (!data || Object.keys(data).length === 0) {
      message.warning('没有可导出的数据，请先提取字段');
      return;
    }

    try {
      message.loading('正在生成PDF文件（含中文支持）...', 0);
      
      // 获取文件名前缀（从第一个文件名）
      const filenamePrefix = files.length > 0 
        ? files[0].name.replace(/\.[^/.]+$/, '') 
        : '报关单';
      
      const timestamp = new Date().toISOString().replace(/[:.]/g, '-').slice(0, -5);
      const filename = `${filenamePrefix}_${timestamp}.pdf`;
      
      // 使用html2canvas + jsPDF方案导出（完美支持中文）
      await exportTableDataToPDF(data, filename);
      
      message.destroy();
      message.success('PDF文件导出成功！（包含完整中文内容）');
    } catch (error) {
      message.destroy();
      message.error('PDF导出失败：' + (error as Error).message);
      console.error('PDF导出错误:', error);
    }
  };

  return (
    <Space size="middle" style={{ marginTop: 16 }}>
      <Button
        type="primary"
        icon={<FileExcelOutlined />}
        onClick={handleExportExcel}
        disabled={disabled}
        size="large"
      >
        导出Excel
      </Button>
      <Button
        icon={<FileTextOutlined />}
        onClick={handleExportJSON}
        disabled={disabled}
        size="large"
      >
        导出JSON
      </Button>
      <Button
        icon={<FilePdfOutlined />}
        onClick={handleExportPDF}
        disabled={disabled}
        size="large"
      >
        导出PDF
      </Button>
    </Space>
  );
};

export default ExportButtons;

